package com.ruoyi.service.project.entity;

import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.service.project.model.PostInfo;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import lombok.Getter;
import lombok.Setter;
import lombok.experimental.Accessors;

/**
 * <p>
 * 项目信息表
 * </p>
 *
 * @author Zane
 * @since 2025-10-11
 */
@Getter
@Setter
@Accessors(chain = true)
@TableName("t_project")
public class ProjectEntity implements Serializable {

  private static final long serialVersionUID = 1L;

  /**
   * 项目ID,PN+yyyy+MM+DD+seq(6)
   */
  @TableId(value = "id", type = IdType.ASSIGN_ID)
  private String id;

  /**
   * 项目名称
   */
  @TableField("project_name")
  private String projectName;

  /**
   * 服务品牌
   */
  @TableField("service_brand")
  private String serviceBrand;

  /**
   * 服务车型
   */
  @TableField("service_model")
  private String serviceModel;

  /**
   * 项目类型
   */
  @TableField("project_type")
  private String projectType;

  /**
   * 执行地点，多个地级市用逗号分隔
   */
  @TableField("execution_place")
  private String executionPlace;

  /**
   * 执行地点，多个地级市用逗号分隔
   */
  @TableField("execution_place_desc")
  private String executionPlaceDesc;

  /**
   * 是否有备用金，0为否，1为是
   */
  @TableField("has_reserve_fund")
  private Integer hasReserveFund;

  /**
   * 备用金金额
   */
  @TableField("reserve_fund")
  private BigDecimal reserveFund;

  /**
   * 锁定金额
   */
  @TableField("locked_amount")
  private BigDecimal lockedAmount;
  /**
   * 项目周期开始时间
   */
  @TableField("project_start")
  private LocalDateTime projectStart;

  /**
   * 项目周期结束时间
   */
  @TableField("project_end")
  private LocalDateTime projectEnd;

  /**
   * 项目概况
   */
  @TableField("project_overview")
  private String projectOverview;

  /**
   * 重点事项
   */
  @TableField("key_items")
  private String keyItems;

  /**
   * 项目预算，自动计算：备用金 + 人工成本
   */
  @TableField("project_budget")
  private BigDecimal projectBudget;

  /**
   * 项目负责人
   */
  @TableField("project_leader")
  private Long projectLeader;

  /**
   * 交付时间
   */
  @TableField("delivery_time")
  private LocalDateTime deliveryTime;

  /**
   * 归属公司
   */
  @TableField("com_id")
  private Long comId;

  /**
   * 岗位招聘信息 为了快速完成岗位招聘信息，使用json存储,使用对象为PostInfo
   */
  @TableField("posts_info")
  private String postsInfo;

  /**
   * 开票信息
   */
  @TableField("invoice")
  private String invoice;
  /**
   * 开票标识 0为未开票 1为已开票
   */
  @TableField("invoice_flag")
  private Integer invoiceFlag;
  /**
   * 开票时间
   */
  @TableField("invoice_time")
  private LocalDateTime invoiceTime;
  /**
   * 开票人
   */
  @TableField("invoice_by")
  private Long invoiceBy;
  /**
   * 状态 :0  未发布、1 筹备中、2 执行中、3 执行完毕交付中、4 交付完毕验收中、5 验收完毕结算中、6 结算完成, 默认0
   */
  @TableField("status")
  private Integer status;

  /**
   * 创建者
   */
  @TableField("create_by")
  private Long createBy;

  /**
   * 创建时间
   */
  @TableField("create_time")
  private LocalDateTime createTime;

  /**
   * 更新者
   */
  @TableField("update_by")
  private Long updateBy;

  /**
   * 更新时间
   */
  @TableField("update_time")
  private LocalDateTime updateTime;

  /**
   * 备注
   */
  @TableField("remark")
  private String remark;


  public List<PostInfo> getPostsInfoList() {
    if (StringUtils.isNotBlank(postsInfo)) {
      return JSONUtil.toList(postsInfo, PostInfo.class);
    }
    return new ArrayList<>();
  }

  public void setPostsInfoList(List<PostInfo> postsInfoList) {
    this.setPostsInfo(JSONUtil.toJsonStr(postsInfoList));
  }
}
